/*
 * Copyright (C) 2012 Rothens
 *
 * This program is free software: you can redistribute it and/or modify
 * it under the terms of the GNU General Public License as published by
 * the Free Software Foundation, either version 3 of the License, or
 * (at your option) any later version.
 *
 * This program is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU General Public License for more details.
 *
 * You should have received a copy of the GNU General Public License
 * along with this program.  If not, see <http://www.gnu.org/licenses/>.
 */
package rpg.server.net;

import java.util.Random;
import rpg.server.RPGServer;
import rpg.server.packets.Packet;
import rpg.server.packets.Packet0Heartbeat;

/**
 * rothens.tumblr.com
 * @author Rothens
 */
public class ServerHandler extends NetworkHandler {
	
	public NetworkManager netmanager;
	private static Random rnd = new Random();
	private int keepAliveId;
	public boolean connectionClosed;
	private RPGServer rs;
	private int checkTime;
	private long lastCheck;
	private long milliSec;
	private boolean hasMoved;
	
	public ServerHandler(RPGServer rs, NetworkManager netmanager){
		connectionClosed = false;
		hasMoved = true;
		this.rs = rs;
		this.netmanager = netmanager;
	}
	
	public void handlePackets() {
		checkTime++;
		netmanager.processReadPackets();
		if((long) checkTime - lastCheck > 20L) {
			lastCheck = checkTime;
			milliSec = System.nanoTime() / 0xf4240L;
			keepAliveId = rnd.nextInt();
			sendPacket(new Packet0Heartbeat(keepAliveId));			
		}
	}
	
	public void kickPlayer(String reason){
		if(connectionClosed){
			return;
		} else {
			netmanager.serverShutdown();
			connectionClosed = true;
			return;
		}
	}
	
	public void sendPacket(Packet packet){
		netmanager.addToSendQueue(packet);
	}

	@Override
	public void handleHeartbeat(Packet0Heartbeat packetheartbeat) {
		super.handleHeartbeat(packetheartbeat);
	}
	
	public void registerPacket(Packet packet) {
		kickPlayer("Protocol error.");
	}
	
	

	@Override
	public boolean isServerHandler() {
		return true;
	}
	
}
